import jieba
from jieba import analyse
import jieba.posseg as pseg
import os
import sys
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np

# 引入TF-IDF关键词抽取接口
tfidf = analyse.extract_tags

def participle(text, cut_all=False):
    seglist_f = " ".join(list(jieba.cut(text,cut_all=False)))
    seglist_t = " ".join(list(jieba.cut(text,cut_all=True)))
    seglist_s = " ".join(list(jieba.cut_for_search(text)))
    if cut_all == 'all':
        return seglist_f, seglist_s, seglist_s
    if cut_all == False:
        return seglist_f
    if cut_all == True:
        return seglist_t
    if cut_all == 's':
        return seglist_s

def get_keywords(text, topK = 5):
    corpus = [participle(text)]
    for i in corpus:
        if len(i) <= 1:
            corpus.pop(i)
    keywords = []
    vectorizer = CountVectorizer()  # 该类会将文本中的词语转换为词频矩阵，矩阵元素a[i][j] 表示j词在i类文本下的词频
    transformer = TfidfTransformer()  # 该类会统计每个词语的tf-idf权值
    tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  # 第一个fit_transform是计算tf-idf，第二个fit_transform是将文本转为词频矩阵
    word = vectorizer.get_feature_names_out()  # 获取词袋模型中的所有词语
    # print(word)
    weight = tfidf.toarray()  # 将tf-idf矩阵抽取出来，元素a[i][j]表示j词在i类文本中的tf-idf权重
    for i in range(len(weight)):  # 打印每类文本的tf-idf词语权重，第一个for遍历所有文本，第二个for便利某一类文本下的词语权重
        print(i)
        sorted_weight = np.argsort(weight[i])[::-1]  # 降序排列索引
        top_k_weight = sorted_weight[:topK]  # 获取前K个索引
        top_k_words = word[top_k_weight]  # 获取对应的单词
    keywords = " ".join(list(set(top_k_words)))
    return keywords

if __name__ == '__main__':
    # text = "小明1995年毕业于清华大学"
    # result = participle(text)
    # print(result)

    # # 原始文本
    text = "线程是程序执行时的最小单位，它是进程的一个执行流，\
            是CPU调度和分派的基本单位，一个进程可以由很多个线程组成，\
            线程间共享进程的所有资源，每个线程有自己的堆栈和局部变量。\
            线程由CPU独立调度执行，在多CPU环境下就允许多个线程同时运行。\
            同样多线程也可以实现并发操作，每个请求分配一个线程来处理。"
    
    # # 基于TF-IDF算法进行关键词抽取
    # keywords = tfidf(text)
    # print("keywords by tfidf:")
    # # 输出抽取出的关键词
    # for keyword in keywords:
    #     print(keyword + "/")

    corpus = "我 来到 北京 清华大学"
    keywords = get_keywords(text)
    print(keywords)
